package com.taotao.cart.service.impl;

import com.taotao.cart.constants.CartConstants;
import com.taotao.cart.domain.PmsCartItems;
import com.taotao.cart.domain.response.CartResponse;
import com.taotao.cart.mapper.CartItemMapper;
import com.taotao.cart.service.CartService;
import com.taotao.common.redis.service.RedisService;
import com.taotao.common.security.utils.SecurityUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class CartServiceImpl implements CartService {
    @Resource
    private RedisService redisService;
    @Resource
    private CartItemMapper cartItemMapper;



    @Override
    public List<CartResponse> cartList() {
        //获取当前登录用户id
        Long userId = SecurityUtils.getUserId();
//        LoginUser userId = new LoginUser();
//        userId.setUserid(1L);
        return cartItemMapper.selectUserCartList(userId);
    }

    @Override
    public void addToCart(Long skuId, Integer quantity) {
        //获取当前登录用户
        Long userId = SecurityUtils.getUserId();

        String cartKey = CartConstants.CART_KEY + userId;

        //判断用户是否有购物车
        if (!redisService.hasKey(cartKey)){
            //去数据库查询用户是否有购物车
            Long cartId = cartItemMapper.selectCartByUserId(userId);
            if(cartId==null){
                //如果用户没有购物车,就给用户创建一个购物车
                cartItemMapper.insertPmsCart(userId);
            }
            //创建redis购物车
            redisService.setCacheMapValue(cartKey,skuId.toString(),null);
        }
        //如果该用户存在购物车,则取出相对应商品的数量
        if (redisService.getCacheMapValue(cartKey,skuId.toString())!=null){
            //如果存在,取出商品数量
            int oldQuantity = redisService.getCacheMapValue(cartKey, skuId.toString());
            //更新商品数据量
            redisService.setCacheMapValue(cartKey,skuId.toString(),oldQuantity+quantity);
        }else {
            //如果不存在,则添加商品到购物车
            redisService.setCacheMapValue(cartKey,skuId.toString(),quantity);
        }
    }

    @Override
    public Long selectCartByUserId(Long userId) {
        return cartItemMapper.selectCartByUserId(userId);
    }

    @Override
    public PmsCartItems selectCartItemsBySkuIdCartIdAndQuantity(Long skuId, Long cartId) {
        return cartItemMapper.selectCartItemsBySkuIdCartIdAndQuantity(skuId,cartId);
    }

    @Override
    public void addInBulkCartItems(ArrayList<PmsCartItems> addCartItemsList) {
        cartItemMapper.insertInBulkCartItems(addCartItemsList);
    }

    @Override
    public void updateInBulkCartItems(ArrayList<PmsCartItems> updateCartItemsList) {
        cartItemMapper.updateInBulkCartItems(updateCartItemsList);
    }

    @Override
    public void deleteCart(List<Long> skuIds) {
        skuIds.forEach(skuId -> {
            //根据skuId 去redis中删除购物车信息
            redisService.deleteCacheMapValue(CartConstants.CART_KEY+SecurityUtils.getUserId(),skuId.toString());
        });

        //获取当前登录用户
        Long userId = SecurityUtils.getUserId();
        //根据用户id查询购物车id
        Long cartId = cartItemMapper.selectCartByUserId(userId);
        cartItemMapper.deleteCart(skuIds,cartId);
    }

    @Override
    public List<CartResponse> selectCartOrderInfoBySkuId(List<Long> skuId,Integer userId) {
        return cartItemMapper.selectCartOrderInfoBySkuId(skuId,userId);
    }


}
